#ifndef CHELPERCLASS_H
#define CHELPERCLASS_H

#include <QObject>
#include <QStandardItem>
#include <QMap>

typedef struct  
{
	QString art_id;
	QString art_sifra;
	QString art_name;
	QString art_edm;
	QString art_kol;
} tArt;

class CHelperClass : public QObject
{
    Q_OBJECT



public:
    CHelperClass(QObject *parent);
    ~CHelperClass();
    bool isKomintentExists(QString &komName);
    bool isArtikliExists(QString &komName);
    int CHelperClass::genSifraArtikal();
    bool isBankExists(QString &komName);
	bool isFakturaExists(QString &fakturaId, QString& tip);
	void fakturaStatus(QStandardItem *item,  QString& tip);
	QString getKomintentName(QString id);
	void getFakturaPlatenIznos(QString& faktBroj, QString& tip);
    float getPlatenIznos();
    float getFakturaVkupenIznos(QString& faktBroj, QString& tip);
	QString getArtikalByID(QString text);
	float getVkKol(QString& artikal_ID, QString& tip);
	float getVkKolBetween(QString& artikal_ID, QString& tip, QString& tip1);
	float getVkKolByDate(QString& artikal_ID, QString& tip, QDate & mDate, QDate & mDate2);
	void getFakturaStatus(QStandardItem *item,  QString& tip);
	void getArtikalStatus(QStandardItem *item);
	bool getArtikalHasNormativ(QString artikalId);
    void createStatusMap(QString& tip);
	QStringList checkUser(QString &userName, QString &userPass);
	void createSaldoMap(int tip);
	float getLagerLista(QString & item,  QString& tip);
    int calcMaxIdTblDokumenti(QString sTip);
    int calcMaxIdTblMagacin(QString sTip);
    bool checkIfArtikalIsProizvod(QString artikalId);
    void createArtikliSoNormativMap();
    bool isArtikalGrouped(QString artikal_id);
	void getListofArtikalGrouped(std::map<QString, tArt> &artMap, QStringList & listKey);
    void createListaIzlezniFakturiIznosi(QString &tip);
    float getFakturaIznos(QString& dok_id);
    float getFakturaDDV(QString& dok_id);
    float getFakturaVkupno(QString& dok_id);
	void createSaldoMapAll_ProdavnicaByArtikal(QString &artikal_id);
	void createSaldoProizvodiPrilivMapAll_ProdavnicaByArtikal(QString &artikal_id);  // 20 22 24 
	void createSaldoArtikliOdlivMapAll_ProdavnicaByArtikal(QString &artikal_id);  // 40 41 44
    double rouded(double num);
	int calcMaxIdTblKalkulacii();
	int calcMaxIdTblKalkulaciiStavki();
	void createSaldoMapAll();
	void createSaldoProizvodiPrilivMapAll();
	void createSaldoArtikliOdlivMapAll();
	float getLagerListaAll(QString & item,  QString& tip, QString & dok_tip);
	void createSaldoMapAll_Prodavnica();
	void createSaldoProizvodiPrilivMapAll_Prodavnica();
	void createSaldoArtikliOdlivMapAll_Prodavnica();
	float getLagerListaAll_Prodavnica(QString & item,  QString& tip);
	float getLagerListaAll_ProdavnicaArtikal(QString & item,  QString& tip);

	bool isArtikalExist_CenovnikProdavnica(QString &artikalId, QString& prodavnicaID);
	QString GetRandomString();
	int calcMaxIdTblFinansoviNalozi();
	int calcMaxIdTblFinansoviNaloziStavki();
	float vkIznosNalogSurovini(QString &nalog_br);
	float vkIznosNalogProizvodi(QString &nalog_br);
	QString getPlatenIznosZaFaktura( QString& tip, QString &faktBr);
	bool isIzvodExists(QString &bankaId, QString &izvodId);
	void createPovratnicaFakturiIznosi();
	void getFakturaIznosiAll( QString& tip);
	float getFakturaPrilivIznos(QString& dok_id );
	float getFakturaOdlivIznos(QString& dok_id );
	float getPovratnicaFakturaVkupno(QString& dok_id );
	void createPlatenoMap(QString& tip);
	void createZadolzuvanjeMap(QString& tip);
	QStringList getVraboteniInfo(QString& u, QString& p);
	QString getVrabotenNextID();

private:
	typedef struct {
		float priliv;
		float odliv;
	} tdataInfo;

	QMap<QString, tdataInfo> mapIznosi;

	typedef struct
	{
		float iznos;
		float ddv;
		float vkupno;
	} fakturiData; 

	float m_vkupenPriliv;
	float m_vkupenOdliv;
    float m_plateno;
	QMap <int, float> m_mapPlateno;
	QMap <int, float> m_mapZadolzuvanje;

	QMap <int, float> m_mapIzlezniFakturiStatus;
	QMap <int, float> m_mapVlezniFakturiStatus;

	QMap <int, float> m_mapIzlezniFakturiIznos;
	QMap <int, float> m_mapVlezniFakturiIznos;
	
	QMap <int, float> m_mapSaldoArtikliPrilivStatus;
	QMap <int, float> m_mapSaldoArtikliOdlivStatus;

	QMap <int, float> m_mapSaldoProizvodiPrilivStatus;
	QMap <int, float> m_mapSaldoProizvodiOdlivStatus;

    QMap <int, int> m_mapArtikliSoNormativStatus;

	QMap <QString, float> m_mapPriliv;
	QMap <QString, float> m_mapOdliv;

	QMap <int, float> m_mapPriliv_Prodavnica;
	QMap <int, float> m_mapOdliv_Prodavnica;

	QMap <int, float> m_mapPriliv_ProdavnicaArtikal;
	QMap <int, float> m_mapOdliv_ProdavnicaArtikal;
	QMap <QString, fakturiData> m_mapPovratnici;

private:
	void createIzlezniFakturiMap();
	void createVlezniFakturiMap();
	void createIzlezniFakturiIznosMap();
	void createVlezniFakturiIznosMap();

	void createSaldoArtikliPrilivMap();
	void createSaldoArtikliOdlivMap();
	void createSaldoProizvodiPrilivMap();
	void createSaldoProizvodiOdlivMap();

    QMap <QString, fakturiData> m_mapFakturi;

};

#endif // CHELPERCLASS_H
